#!/usr/bin/env python3
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
""" This programs builds a libbpf static library and places it in the runtime
    folder. The library and its headers are required by the kernel target.
"""

import os
import sys
import logging
from pathlib import Path

FILE_DIR = Path(__file__).resolve().parent
# Append tools to the import path.
sys.path.append(str(FILE_DIR.joinpath("../../tools")))
import testutils


def create_dir(directory):
    """Create the folder, if it does not exit yet"""
    if not directory == "" and not os.path.exists(directory):
        os.makedirs(directory)


def main():
    # Configure logging.
    logging.basicConfig(
        format="%(levelname)s:%(message)s",
        level=logging.WARN,
        filemode="w",
    )
    libbpf_dir = FILE_DIR.joinpath("runtime/contrib/libbpf")
    libbpf_src_dir = libbpf_dir.joinpath("src")
    libbpf_build_dir = libbpf_src_dir.joinpath("build")
    libbpf_target_dir = FILE_DIR.joinpath("runtime")
    # Download submodule if it has not been initialized yet
    git_cmd = f"cd {FILE_DIR} && git submodule update --init {libbpf_dir}"
    # We ignore the error that is thrown here
    testutils.exec_process(
        args=git_cmd,
        errmsg="Could not initialize libbpf submodule",
        timeout=20,
    )
    # Create the libbpf build directory
    create_dir(libbpf_build_dir)
    # Build libbpf
    mk_cmd = f"make -C {libbpf_src_dir} install "
    mk_cmd += "BUILD_STATIC_ONLY=y "
    mk_cmd += f"OBJDIR={libbpf_build_dir} "
    mk_cmd += f"DESTDIR={libbpf_target_dir} "
    err = testutils.exec_process(args=mk_cmd, errmsg="Could not build libbpf")
    return err


if __name__ == "__main__":
    main()
